Conversation
Adds parser and tests for the EFP2 REPLACE command, which reports a team member substitution on a piste (piste code, side, fencer number 1-3). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds parser and tests for the EFP2 BOUTSTOP command, which cancels a previously sent DISP and clears the bout on the given piste. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds parser and tests for the EFP2 TEAM command, which transfers the list of team members for one side on a piste. Parses 4 members (3 active + reserve), 9 round fencer assignments, and a unique team ID. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds parsers and tests for the remaining simple EFP2 commands: - NEXT/PREV: referee requests next/previous match (1 param: piste) - STANDBY: switch apparatus to sleep mode (1 param: piste) - BROKEN: report lost contact with piste (1 param: piste) - UPDATED: notify clients that competition XML data has changed (2 params: eventId, competitionCode) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds parser and tests for the EFP2 INFO command, the primary piste state message. Parses 42 tokens covering bout metadata (piste, event, phase, round, state, stopwatch), referee flags (remote control, priority, calls for technician/video/doctor/DT, reverse, standby), and full scoring data for both fencers (id, name, nation, score, cards, lamps, video reviews). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Completes the full EFP2 command set: - ACK/NAK: zero-param bout result acknowledgements from server to master - GETTEAM: request team list from Server of Results (piste, side) - DENY: rejection response with reason string Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds round-trip tests for all 18 EFP2 commands through process(),
an unknown command test, fixes three mislabelled test names ('ping'
was used for STOP and MSG), and removes the stale skipped DISP test
that referenced an outdated output shape.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…f-concept) Introduces a symmetric build/compose architecture that mirrors the existing parse/process pipeline. `build()` returns a token array, `registerBuilder()` registers it per command, and `compose()` at the protocol layer assembles the full |EFP2|COMMAND|...| wire string. Round-trip tests verify parse→compose fidelity for HELLO with and without a piste code. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds build() and registerBuilder() to all remaining 17 commands, registers every builder in commands/index.js, and adds #registerBuilder + #build unit tests to each command file. Protocol-level round-trip tests (compose ∘ process) are added for all 18 commands in cyrano.test.js. Test count grows from 195 → 246 passing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two UDP actors on loopback — Server (port 50100) and Master/piste RED (port 50101) — walk through the complete lifecycle specified in the EFP2 protocol: HELLO → DISP → INFO(Not active) → INFO(Fencing) ×8 → INFO(Ending) → ACK → INFO(Not active). The wire bytes logged at each step are produced by compose() and consumed by process(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/commands/, each following the established register/parse patterncyrano.test.jsprotocol round-trip suite to cover every command end-to-end throughprocess(), fixes mislabelled test names, and removes a stale skipped testCLAUDE.mdwith build/test commands, architecture overview, and full EFP2 protocol reference (node topology, command table, field layouts, piste/competition codes, Master state machine)Commands implemented
ACKNAKBOUTSTOPBROKENDENYDISPGETTEAMHELLOINFOMSGNEXTPINGPREVREPLACESTANDBYSTOPTEAMUPDATEDTest plan
npm testpasses (20 suites, 188 passing, 3 skipped)INFO(42 tokens) andTEAM(20 tokens) parsed output shapes🤖 Generated with Claude Code